package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.CommonStateEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * 管理员实体类，用于存储管理员的详细信息。
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "admin")
public class Admin implements Serializable{

    /**
     * 用户编号，自增长的唯一标识符。
     */
    @ApiModelProperty(value = "主键ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户登录名，必须唯一且不能为空。
     */
    @ApiModelProperty(value = "用户登录名", required = true, example = "admin")
    private String username;

    /**
     * 用户密码，不会在API响应中返回。
     */
    @ApiModelProperty(value = "用户密码", hidden = true)
    private String password;

    /**
     * 启用状态，通常是一个枚举值。
     */
    @ApiModelProperty(value = "启用状态", example = "NORMAL")
    private CommonStateEnum enable;

    /**
     * 用户最后登录时间。
     */
    @ApiModelProperty(value = "用户最后登录时间", example = "2023-01-01 12:00:00")
    private Date lastLoginTime;

    /**
     * 最后登录IP地址。
     */
    @ApiModelProperty(value = "最后登录IP", example = "192.168.1.1")
    private String lastLoginIp;

    /**
     * 角色ID，关联到角色实体。
     */
    @ApiModelProperty(value = "角色ID", required = true, example = "1")
    private Long roleId = 1L;

    /**
     * 部门信息，使用Hibernate的NotFoundAction.IGNORE避免空指针异常。
     */
    @ApiModelProperty(value = "部门信息")
    private Department department;

    /**
     * 真实姓名，不能为空。
     */
    @ApiModelProperty(value = "真实姓名", required = true, example = "张三")
    private String realName;

    /**
     * 联系电话，不能为空。
     */
    @ApiModelProperty(value = "联系电话", required = true, example = "13800138000")
    private String mobilePhone;

    /**
     * QQ号。
     */
    @ApiModelProperty(value = "QQ号", example = "12345678")
    private String qq;

    /**
     * 邮箱地址。
     */
    @ApiModelProperty(value = "邮箱地址", example = "admin@example.com")
    private String email;

    /**
     * 头像URL。
     */
    @ApiModelProperty(value = "头像URL", example = "https://example.com/avatar.jpg")
    private String avatar;

    /**
     * 状态，通常是一个枚举值。
     */
    @ApiModelProperty(value = "状态", example = "NORMAL")
    private CommonStateEnum status = CommonStateEnum.NORMAL;

    /**
     * 角色名称，用于展示，不是数据库字段。
     */
    @ApiModelProperty(value = "角色名称", example = "超级管理员")
    private String roleName;
}
